extends Node

## 技能自动升级管理器
## 在杀鸡时间和战斗时间内，每秒有1.5%的概率使技能升一级

## 升级概率（每秒）
const UPGRADE_PROBABILITY_PER_SECOND = 0.015  # 1.5%

## 当前是否在杀鸡时间
var is_in_kill_chicken_time = false
## 当前是否在战斗时间
var is_in_battle_time = false

## 升级计时器
var upgrade_timer: Timer

func _ready() -> void:
	# 创建升级计时器
	upgrade_timer = Timer.new()
	upgrade_timer.wait_time = 1.0  # 每秒检查一次
	upgrade_timer.one_shot = false
	upgrade_timer.timeout.connect(_on_upgrade_timer_timeout)
	add_child(upgrade_timer)
	
	# 订阅相关事件
	EventBus.subscribe("kill_chicken_start", _on_kill_chicken_start)
	EventBus.subscribe("kill_chicken_end", _on_kill_chicken_end)
	EventBus.subscribe("battle_start", _on_battle_start)
	EventBus.subscribe("battle_end", _on_battle_end)
	
	print("技能自动升级管理器已初始化")

## 杀鸡开始事件
func _on_kill_chicken_start() -> void:
	is_in_kill_chicken_time = true
	_start_upgrade_timer()
	print("进入杀鸡时间，开始技能自动升级检查")

## 杀鸡结束事件
func _on_kill_chicken_end() -> void:
	is_in_kill_chicken_time = false
	_check_and_stop_timer()
	print("杀鸡时间结束，停止技能自动升级检查")

## 战斗开始事件
func _on_battle_start() -> void:
	is_in_battle_time = true
	_start_upgrade_timer()
	print("进入战斗时间，开始技能自动升级检查")

## 战斗结束事件
func _on_battle_end() -> void:
	is_in_battle_time = false
	_check_and_stop_timer()
	print("战斗时间结束，停止技能自动升级检查")

## 开始升级计时器
func _start_upgrade_timer() -> void:
	if not upgrade_timer.is_stopped():
		return
	upgrade_timer.start()
	print("技能自动升级计时器已启动")

## 检查并停止计时器
func _check_and_stop_timer() -> void:
	if not is_in_kill_chicken_time and not is_in_battle_time:
		upgrade_timer.stop()
		print("技能自动升级计时器已停止")

## 升级计时器超时事件
func _on_upgrade_timer_timeout() -> void:
	# 检查是否在杀鸡时间或战斗时间
	if not is_in_kill_chicken_time and not is_in_battle_time:
		return
	
	# 为每个技能独立判断升级概率
	_try_upgrade_all_skills()

## 尝试升级所有技能（每个技能独立判断）
func _try_upgrade_all_skills() -> void:
	# 获取当前技能列表
	var current_skills = SkillManager.current_skills
	if current_skills.is_empty():
		return
	
	var rng = RandomNumberGenerator.new()
	rng.randomize()
	var upgraded_skills = []
	
	# 为每个技能独立判断升级概率
	for skill in current_skills:
		var random_value = rng.randf()
		if random_value < UPGRADE_PROBABILITY_PER_SECOND:
			# 升级这个技能
			var skill_name = skill.get_string("name")
			var current_level = skill.get_integer("level")
			SkillManager.add_skill(skill, 1)
			# 升级技能
			skill.set_integer("level", current_level + 1)
			
			upgraded_skills.append(skill_name)
			print("经过战斗,技能%s自动升级" % [skill_name])
	
	# 如果有技能升级了，触发相关事件
	if not upgraded_skills.is_empty():
		# 触发技能变化事件
		EventBus.push_event("player_skill_change", [current_skills])
		
		# 显示升级提示
		var tip_text = "经过一段时间战斗,%s自动升级！" % [", ".join(upgraded_skills)]
		Utils.show_fluent_tip(tip_text)

## 尝试升级随机技能（保留原函数用于兼容性）
func _try_upgrade_random_skill() -> void:
	# 获取当前技能列表
	var current_skills = SkillManager.current_skills
	if current_skills.is_empty():
		return
	
	# 随机选择一个技能进行升级
	var random_skill = current_skills.pick_random()
	var skill_name = random_skill.get_string("name")
	var current_level = random_skill.get_integer("level")
	
	# 升级技能
	random_skill.set_integer("level", current_level + 1)
	
	# 更新技能信息
	SkillManager.update_skill_info(random_skill, skill_name, current_level + 1)
	
	# 如果是被动技能，重新应用效果
	if random_skill.get_integer("need_mp") < 0:
		# 先移除旧等级的效果
		SkillManager.remove_skill_func(skill_name, current_level)
		# 应用新等级的效果
		var skill_func = SkillManager.get_skill_func(skill_name, current_level + 1)
		if skill_func:
			skill_func.call()
	
	# 触发技能变化事件
	EventBus.push_event("player_skill_change", [current_skills])
	
	# 显示升级提示
	Utils.show_fluent_tip("经过战斗,技能%s自动升级！" % [skill_name])
	print("经过战斗,技能%s自动升级" % [skill_name])

## 手动触发技能升级（用于测试）
func manual_trigger_upgrade() -> void:
	if is_in_kill_chicken_time or is_in_battle_time:
		_try_upgrade_random_skill()
	else:
		print("当前不在杀鸡时间或战斗时间，无法触发技能升级")

## 获取当前状态信息
func get_status_info() -> Dictionary:
	return {
		"is_in_kill_chicken_time": is_in_kill_chicken_time,
		"is_in_battle_time": is_in_battle_time,
		"upgrade_probability_per_second": UPGRADE_PROBABILITY_PER_SECOND,
		"timer_active": not upgrade_timer.is_stopped()
	} 
